package com.aaa.singleton;



/**
 * @author C-Q
 * @version 1.1.0
 * @Description: 设计模式
 * 单例模式：
 *      是Java中最简单的设计模式之一，这种类型的设计模式属于创建型模式，它提供了一种创建对象的最佳方式
 *      这种模式涉及到了一个单一的类，该类负责创建自己的对象，同时确保只有单个对象被创建，这个类提供了一种
 *      访问其唯一的对象的方式，可以直接访问，不需要实例化该类的对象。
 *      总结：该类只能被创建一次，而且这个创建是给类本身自己创建
 *      单例设计模式分类两种：
 *          饿汉模式：类加载就会导致该单实例对象被创建
 *          懒汉模式：类加载不会导致该单实例对象被创建，而是首次使用该对象时才会创建
 *
 * @date 2022/11/7
 */
public class Singleton1Lock2 {

    //第一步
        public Singleton1Lock2() {}

     //声明一个静态的本类对象--懒汉模式
        public static Singleton1Lock2 singleton1Lock2;

    //提供一个静态方法返回本类的对象
    public static Singleton1Lock2 getInstance(){
        //如果多个线程进来后发现singleton1Lock2不等于null，则无需再获取锁对象
            if (singleton1Lock2 == null) {
                synchronized (Singleton1Lock2.class) {
                    //如果对象不等于null则无需创建对象
                    if (singleton1Lock2 == null) {
                          singleton1Lock2 = new Singleton1Lock2();
                    }
                }
            }
            return singleton1Lock2;
    }
    public void show(){
        System.out.println("~~~~~~show方法~~~~~~~");
    }

    /*使用双重锁既解决了线程安全问题又解决了执行效率的问题*/
}
